/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package td1;

import java.awt.Color;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Vector;

/**
 * Controleur de l'application, fait la liaison entre la partie modèle et la partie vue de l'application
 * @author saluzzo
 */
public class Controleur {

    public Controleur() {
        Collection = new Vector<Quadrilatere>();
        Vue = new IHM(this);
        Vue.setSize(800, 600);
        Vue.setVisible(true);
    }

    public Vector<Quadrilatere> getCollection() {
        return Collection;
    }

    public void action(String Vue, String Action, Color Couleur, float[] parametre) {
        if(Vue.equals("Canvas")) {
            if(Action.equals("clear")) {
                Collection.clear();
                this.Vue.jc.repaint();
            }
            if(Action.equals("trierCollection")) {
                Collections.sort(Collection);
            }
            if(Action.equals("actualiserListe")) {
                this.Vue.getModeleListeCollection().removeAllElements();
                for (Enumeration<Quadrilatere> e = this.Collection.elements(); e.hasMoreElements();) {
                    Quadrilatere quad = e.nextElement();
                    this.Vue.getModeleListeCollection().addElement(new String(quad.type()+" "+Integer.toString(quad.getCouleur().getRed())+" "+Integer.toString(quad.getCouleur().getGreen())+" "+Integer.toString(quad.getCouleur().getBlue())));
                    this.Vue.getModeleListeCollection().addElement(new String(quad.coordonnees()));
                }
            }
        }
        if (Vue.equals("Inspecteur")) {
            if (Action.equals("creerCarre")) {
                Quadrilatere temp = new Carre(new Point(parametre[0],parametre[1]),(int)parametre[2]);
                temp.setCouleur(Couleur);
                this.ajouterObjetCollection(temp);
            }
            if(Action.equals("creerCerfVolant")) {

                Quadrilatere temp = new CerfVolant(new Point(
                        parametre[0],
                        parametre[1]),
                        (int)parametre[2],
                        (int)parametre[3],
                        (int)parametre[4]);
                temp.setCouleur(Couleur);
                this.ajouterObjetCollection(temp);
            }
            if (Action.equals("creerLosange")) {

                Quadrilatere temp = new Losange(new Point(
                        parametre[0],
                        parametre[1]),
                        (int)parametre[2],
                        (int)parametre[3]);
                temp.setCouleur(Couleur);
                this.ajouterObjetCollection(temp);
            }
            if (Action.equals("creerParallelogramme")) {
                Quadrilatere temp = new Parallelogramme(new Point(
                        parametre[0],
                        parametre[1]),
                        new Point(
                        parametre[2],
                        parametre[3]),
                        new Point(
                        parametre[4],
                        parametre[5]));
                temp.setCouleur(Couleur);
                this.ajouterObjetCollection(temp);
            }
            if (Action.equals("creerQuadrilatere")) {
                Quadrilatere temp = new Quadrilatere(new Point(
                        parametre[0],
                        parametre[1]),
                        new Point(
                        parametre[2],
                        parametre[3]),
                        new Point(
                        parametre[4],
                        parametre[5]),
                        new Point(
                        parametre[6],
                        parametre[7])
                        );
                temp.setCouleur(Couleur);
                this.ajouterObjetCollection(temp);
            }
            if (Action.equals("creerRectangle")) {
                Quadrilatere temp = new Rectangle(new Point(
                        parametre[0],
                        parametre[1]),
                        (int)parametre[2],
                        (int)parametre[3]);
                temp.setCouleur(Couleur);
                this.ajouterObjetCollection(temp);
            }
            if (Action.equals("creerTrapeze")) {
                Quadrilatere temp = new Trapeze(new Point(
                        parametre[0],
                        parametre[1]),
                        new Point(
                        parametre[2],
                        parametre[3]),
                        new Point(
                        parametre[4],
                        parametre[5]),
                        parametre[6]);
                temp.setCouleur(Couleur);
                this.ajouterObjetCollection(temp);
            }
        }
        
    }

    private void ajouterObjetCollection(Quadrilatere pQuadrilatere) {
        pQuadrilatere.setZValue(Collection.size());
        Collection.add(pQuadrilatere);
        Collection.lastElement().affiche();
        Collections.sort(Collection);

        Vue.jc.repaint();
    }
    
    private IHM Vue;
    private Vector<Quadrilatere> Collection;
}
